/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Util;


import DAO.AtividadeDAO;
import DAO.ClassificacaoDAO;
import DAO.ItemClassificacaoDAO;
import DAO.ParametroEstimativaDAO;
import DAO.ProcessoDAO;
import DAO.ProjetoDAO;
import DAO.RegistroExecucaoDAO;
import DAO.AtividadeExecutadaDAO;
import Modelo.Atividade;
import Modelo.AtividadeExecutada;
import Modelo.Classificacao;
import Modelo.ItemClassificacao;
import Modelo.ParametroEstimativa;
import Modelo.Processo;
import Modelo.Projeto;
import Modelo.RegistroExecucao;
import java.io.File;
import java.io.IOException;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.persistence.EntityManager;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

/**
 *
 * @author Isadora
 */
public class XML {
    private String INPUT;
    private String SUCCESS;
   //definir aqui simpledateformat
    
    //substituir o nome pro importar
    public void gravaClassificacoesProjeto() throws JDOMException, IOException{
  
        try{
     
        //Aqui você informa o nome do arquivo XML.  
        File f = new File("C:\\Users\\isadora.paranhos\\Desktop\\29-6\\8-2\\classificacoes_projeto.xml");  

        //Criamos uma classe SAXBuilder que vai processar o XML4  
        SAXBuilder sb = new SAXBuilder();  

        //Este documento agora possui toda a estrutura do arquivo.  
        Document d = sb.build(f);  

        //Recuperamos o elemento root  
        Element mural = d.getRootElement();
        
        //Recuperamos os elementos filhos (children)  
        List elements = mural.getChildren();  
        Iterator i = elements.iterator();  
        
        
        
        EntityManager em = new JPA().getEntityManager();
        ClassificacaoDAO classificacaoDao = new ClassificacaoDAO(em);
        ItemClassificacaoDAO itemDao = new ItemClassificacaoDAO(em);
        em.getTransaction().begin();
        //Iteramos com os elementos filhos, e filhos do dos filhos  
        while (i.hasNext()) {  
            Classificacao classificacao = new Classificacao();
            //String verificaClassificacao = "nao achou";
           classificacao.setId(-1);
            Element elemento = (Element) i.next();  
           // verificaClassificacao = classificacaoDao.retornaClassificacao(Integer.parseInt(elemento.getAttributeValue("id")));
            classificacao = classificacaoDao.retornaClassificacao(Integer.parseInt(elemento.getAttributeValue("id")));
            //if (verificaClassificacao.equals("nao achou")){
            if (classificacao.getId() == 0){
                classificacao.setId(Integer.parseInt(elemento.getAttributeValue("id")));            
                classificacao.setNome(elemento.getChildText("nome"));
                classificacao.setDescricao(elemento.getChildText("descricao"));
                classificacaoDao.salvar(classificacao);
            }
       
            List itens = elemento.getChild("itens_classificacao").getChildren();
            Iterator j = itens.iterator();
            while(j.hasNext()){
                ItemClassificacao item = new ItemClassificacao();
                item.setId(-1);
                elemento = (Element) j.next();
                item = itemDao.retornaItemClassificacao(Integer.parseInt(elemento.getAttributeValue("id")));
                if (item.getId() == 0){
                    item.setId(Integer.parseInt(elemento.getAttributeValue("id")));
                    item.setNome(elemento.getChildText("nome"));
                    item.setDescricao(elemento.getChildText("descricao"));
                    item.setClassificacao(classificacao);
                    itemDao.salvar(item);  
                }
            }
        }
        em.getTransaction().commit();
        em.close();
        }
        catch(Exception e){
        
        }       
    }
    
    public void gravaProcesso() throws JDOMException, IOException{
  
        try{
     
        //Aqui você informa o nome do arquivo XML.  
        File f = new File("C:\\Users\\isadora.paranhos\\Desktop\\29-6\\8-2\\processo.xml");  

        //Criamos uma classe SAXBuilder que vai processar o XML4  
        SAXBuilder sb = new SAXBuilder();  

        //Este documento agora possui toda a estrutura do arquivo.  
        Document d = sb.build(f);  

        //Recuperamos o elemento root  
        Element mural = d.getRootElement();
        
        //Recuperamos os elementos filhos (children)  
        List elements = mural.getChildren();  
        Iterator i = elements.iterator();  
        
        
        
        EntityManager em = new JPA().getEntityManager();
        ProcessoDAO processoDao = new ProcessoDAO(em);
        ParametroEstimativaDAO parametroEstimativaDao = new ParametroEstimativaDAO(em);
        AtividadeDAO atividadeDao = new AtividadeDAO(em);
        
        em.getTransaction().begin();
        Processo processo = new Processo();
        //Iteramos com os elementos filhos, e filhos do dos filhos  
        while (i.hasNext()) {  
            
            
            Element elemento = (Element) i.next();  
            if (elemento.getName().equals("processo")){
                processo = processoDao.retornaProcesso(Integer.parseInt(elemento.getAttributeValue("id")));
                if (processo.getId() == 0){
                    processo.setId(Integer.parseInt(elemento.getAttributeValue("id")));            
                    processo.setNome(elemento.getChildText("nome"));
                    processo.setDescricao(elemento.getChildText("descricao"));
                    processoDao.salvar(processo);
                }
            }
            else if (elemento.getName().equals("parametros_estimativa")){
            
                List parametros = elemento.getChildren();
                Iterator j = parametros.iterator();
                while(j.hasNext()){
                    ParametroEstimativa parametro = new ParametroEstimativa();
                    elemento = (Element) j.next();
                    parametro = parametroEstimativaDao.retornaParametroEstimativa(Integer.parseInt(elemento.getAttributeValue("id")));
                    if (parametro.getId() == 0){
                        parametro.setId(Integer.parseInt(elemento.getAttributeValue("id")));
                        parametro.setNome((elemento.getChildText("nome")));
                        parametroEstimativaDao.salvar(parametro);  
                    }
                 }  
            }
            else if (elemento.getName().equals("atividades")){
            List atividades = elemento.getChildren();
            Iterator k = atividades.iterator();
            while(k.hasNext()){
                Atividade atividade = new Atividade();
                elemento = (Element) k.next();
                atividade = atividadeDao.retornaAtividade(Integer.parseInt(elemento.getAttributeValue("id")));
                if (atividade.getId() == 0){
                    atividade.setId(Integer.parseInt(elemento.getAttributeValue("id")));            
                    atividade.setNome(elemento.getChildText("nome"));
                    atividade.setDescricao(elemento.getChildText("descricao"));
                    atividade.setOrdem(Integer.parseInt(elemento.getChildText("ordem"))); 
                    atividade.setProcesso(processo);
                    processo.setAtividades(atividade);
                    processoDao.salvar(processo);
                    atividadeDao.salvar(atividade);    
                }
            }
            }          
        }
        em.getTransaction().commit();
        em.close();
        }
        catch(Exception e){ 
            e.printStackTrace();
        }        
    }  
    //receber caminho base e nome do arquivo
    public void gravaProjeto() throws JDOMException, IOException, Exception{
  
        try{
     
        //Aqui você informa o nome do arquivo XML.  
        File f = new File("C:\\Users\\isadora.paranhos\\Desktop\\29-6\\8-2\\projeto.xml");  

        //Criamos uma classe SAXBuilder que vai processar o XML4  
        SAXBuilder sb = new SAXBuilder();  

        //Este documento agora possui toda a estrutura do arquivo.  
        Document d = sb.build(f);  

        //Recuperamos o elemento root  
        Element mural = d.getRootElement();
        
        //Recuperamos os elementos filhos (children)  
        List elements = mural.getChildren();  
        Iterator i = elements.iterator();  

        EntityManager em = new JPA().getEntityManager();
        ProjetoDAO projetoDao = new ProjetoDAO(em);
        AtividadeExecutadaDAO atividadeExecutadaDao = new AtividadeExecutadaDAO(em);
        RegistroExecucaoDAO registroExecucaoDao = new RegistroExecucaoDAO(em);
        ClassificacaoDAO classificacaoDao = new ClassificacaoDAO(em);
        ItemClassificacaoDAO itemDao = new ItemClassificacaoDAO(em);
        ProcessoDAO processoDao = new ProcessoDAO(em);
        AtividadeDAO atividadeDao = new AtividadeDAO(em);
        SimpleDateFormat string_data = new SimpleDateFormat("dd/MM/yyyy");
        SimpleDateFormat string_hora = new SimpleDateFormat("HH:mm");  
        Date datasql = new Date();
        Date hora = new Date();
        
        em.getTransaction().begin();
       // Projeto projeto = new Projeto();
        //Iteramos com os elementos filhos, e filhos do dos filhos  
        while (i.hasNext()) {  
            Element elemento = (Element) i.next();  
            if (elemento.getName().equals("projeto")){
                Projeto projeto = projetoDao.retornaProjeto(Integer.parseInt(elemento.getAttributeValue("id")));
                if (projeto.getId() == 0){
                    projeto.setId(Integer.parseInt(elemento.getAttributeValue("id")));            
                    projeto.setNome(elemento.getChildText("nome"));
                    projeto.setDescricao(elemento.getChildText("descricao"));
                    List classificacoes = elemento.getChild("classificacoes_projeto").getChildren();
                    Iterator j = classificacoes.iterator();
                    while(j.hasNext()){
                        Element element = (Element) j.next();
                        ItemClassificacao item = new ItemClassificacao();
                        item = itemDao.retornaItemClassificacao(Integer.parseInt(element.getAttributeValue("id_item")));
                        item.setProjetos(projeto);
                    }
                    Processo processo = new Processo();
                    processo = processoDao.retornaProcesso(Integer.parseInt(elemento.getChildText("processo")));                    
                    if (processo.getId() != 0)
                        projeto.setProcesso(processo);
                    processo.setProjeto(projeto);
                    projetoDao.salvar(projeto);
                }
            }
            else if (elemento.getName().equals("atividades_executadas")){
                List atividadesExecutada = elemento.getChildren();
                Iterator j = atividadesExecutada.iterator();
                while(j.hasNext()){
                    Element atividade_Executada = (Element) j.next();
                    AtividadeExecutada atividadeExecutada = new AtividadeExecutada();
                    atividadeExecutada = atividadeExecutadaDao.retornaAtividadeExecutada(Integer.parseInt(atividade_Executada.getAttributeValue("id")));
                    if (atividadeExecutada.getId() == 0){
                        atividadeExecutada.setId(Integer.parseInt(atividade_Executada.getAttributeValue("id")));
                        atividadeExecutada.setStatus(atividade_Executada.getChildText("status"));
                        datasql = new java.sql.Date(string_data.parse(atividade_Executada.getChildText("data_inicio")).getTime());  
                        atividadeExecutada.setDataInicio(datasql);
                        datasql = new java.sql.Date(string_data.parse(atividade_Executada.getChildText("data_fim")).getTime());  
                        atividadeExecutada.setDataFim(datasql);
                        Atividade atividade = new Atividade();
                        atividade = atividadeDao.retornaAtividade(Integer.parseInt(atividade_Executada.getAttributeValue("id")));
                        if (atividade.getId() != 0)
                            atividadeExecutada.setAtividade(atividade);  
                        atividadeExecutadaDao.salvar(atividadeExecutada);
                    }
                    List registros = atividade_Executada.getChild("registros_execucao").getChildren();
                    Iterator k = registros.iterator();
                    while (k.hasNext()){
                        Element registro_execucao = (Element) k.next();
                        RegistroExecucao registro = new RegistroExecucao();
                        registro = registroExecucaoDao.retornaRegistroExecucao(Integer.parseInt(registro_execucao.getAttributeValue("id")));
                        if (registro.getId() == 0){
                            registro.setId(Integer.parseInt(registro_execucao.getAttributeValue("id")));
                            hora = string_hora.parse(registro_execucao.getChildText("hora_inicio"));
                            Time time = new Time(hora.getTime());
                            registro.setHoraInicio(time);
                            hora = string_hora.parse(registro_execucao.getChildText("hora_fim"));
                            time = new Time(hora.getTime());
                            registro.setHoraFim(time);
                            datasql = new java.sql.Date(string_data.parse(registro_execucao.getChildText("data_inicio")).getTime());  
                            registro.setDataInicio(datasql);
                            datasql = new java.sql.Date(string_data.parse(registro_execucao.getChildText("data_fim")).getTime());  
                            registro.setDataFim(datasql);
                            registro.setComentario(registro_execucao.getChildText("comentario"));
                            registro.setAtividadeExecutada(atividadeExecutada);
                            registroExecucaoDao.salvar(registro);
                        }
                    }
                }
             }}          
        em.getTransaction().commit();
        em.close();
        }
        catch(Exception e){ 
            e.printStackTrace();
        }        
    }    
}
   